<?php

class DateUtil{
	
	
	/**
	 * @param
	 * data - Recebe como parâmetro uma data no formato DD/MM/AAAA e obtém o dia apenas da data
	 * @return dia
	 */
	
	public static function obterDiaDeData($data){
		$dia = "";
		if($data != "" && $data != null){
			$posicao = 0;			
			while(mb_substr($data, $posicao, 1) != '/'){
				$dia = $dia . mb_substr($data, $posicao, 1);
				$posicao++;
			}
		}
		
		return $dia;
	}
	
	
	/**
	 * @param
	 * data - Recebe como parâmetro uma data no formato DD/MM/AAAA e obtém o mes apenas da data
	 * @return mes
	 */
	
	public static function obterMesDeData($data){
		$dia = "";
		$mes = "";
		$tokenCountDDMMYYYY = 2;
		$tokenCountMMYYYY = 1;
		$tokenCount = 0;
		$data = trim($data);
		$tamanhoStrData = mb_strlen($data);
		
		
		if($data != "" && $data != null){
			$posicao = 0;
			while(mb_substr($data, $posicao, 1) != '/' && $posicao < $tamanhoStrData){
				$dia = $dia . mb_substr($data, $posicao, 1);
				$posicao++;
				if(mb_substr($data, $posicao, 1) == '/'){
					$tokenCount = $tokenCount + 1;
				}
			}
			$posicao = $posicao + 1;
			
			while(mb_substr($data, $posicao, 1) != '/' && $posicao < $tamanhoStrData){
				$mes = $mes . mb_substr($data, $posicao, 1);
				$posicao++;
				if(mb_substr($data, $posicao, 1) == '/'){
					$tokenCount = $tokenCount + 1;
				}
			}			
		}
		
		if($tokenCount == $tokenCountDDMMYYYY){
			return $mes;
		}
		else{
			return $dia;
		}		
		
	}
	
	//Antigo metodo de obtenção de mes da data - Apagar após testes
	
	/*public static function obterMesDeData($data){
		$dia = "";
		$mes = "";
		if($data != "" && $data != null){
			$posicao = 0;
			while(mb_substr($data, $posicao, 1) != '/'){
				$dia = $dia . mb_substr($data, $posicao, 1);
				$posicao++;
			}
			$posicao = $posicao + 1;
			
			while(mb_substr($data, $posicao, 1) != '/'){
				$mes = $mes . mb_substr($data, $posicao, 1);
				$posicao++;
			}			
		}
		
		return $mes;
	}
	*/
	
	public static function obterAnoDeData($data){
		$dia = "";
		$mes = "";
		$ano = "";
		
		$tokenCountDDMMYYYY = 2;
		$tokenCountMMYYYY = 1;
		$tokenCount = 0;
		$data = trim($data);
		
		if($data != "" && $data != null){
			$posicao = 0;
			$tamanhoStrData = mb_strlen($data);
			while(mb_substr($data, $posicao, 1) != '/' && $posicao < $tamanhoStrData){
				$dia = $dia . mb_substr($data, $posicao, 1);
				$posicao++;
				if(mb_substr($data, $posicao, 1) == '/'){
					$tokenCount = $tokenCount + 1;
				}
			}
			$posicao = $posicao + 1;
			
			while(mb_substr($data, $posicao, 1) != '/' && $posicao < $tamanhoStrData){
				$mes = $mes . mb_substr($data, $posicao, 1);
				$posicao++;
				if(mb_substr($data, $posicao, 1) == '/'){
					$tokenCount = $tokenCount + 1;
				}
			}
			$posicao = $posicao + 1;

			while($posicao < $tamanhoStrData){
				$ano = $ano . mb_substr($data, $posicao, 1);
				$posicao++;
				if(mb_substr($data, $posicao, 1) == '/'){
					$tokenCount = $tokenCount + 1;
				}
			}
			
		}
		if($tokenCount == $tokenCountDDMMYYYY){
			return $ano;
		}
		else{
			return $mes;
		}			
		
	}
	
	public static function calcularIdade($dataNascimento){
		$idade = 0;
		
		//Data atual do sistema
		$dataAtual = date("d/m/Y");
		$diaAtual = DateUtil::obterDiaDeData($dataAtual);
		$mesAtual = DateUtil::obterMesDeData($dataAtual);
		$anoAtual = DateUtil::obterAnoDeData($dataAtual);
		
		//Separando os dados de data de nascimento
		$diaDeNascimento = DateUtil::obterDiaDeData($dataNascimento);
		$mesDeNascimento = DateUtil::obterMesDeData($dataNascimento);
		$anoDeNascimento = DateUtil::obterAnoDeData($dataNascimento);
		
		$idade = $anoAtual - $anoDeNascimento;
		
		if($mesAtual < $mesDeNascimento){
			$idade = $idade - 1;
		}
		else if($diaAtual < $diaDeNascimento){
			$idade = $idade - 1;
		}
		
		//Verificação de idade negativa
		if($idade < 0){
			$idade = 0;
		}
		
		return $idade;
	}
	
}


?>